package main

import (
	"context"

	"github.com/infraboard/mcube/ioc"
	"github.com/infraboard/mcube/ioc/config/application"

	// 加载所有业务模块
	_ "gitee.com/go-course/go12/devcloud-mini/mcenter/apps"
	"github.com/infraboard/mcenter/apps/service"
	"github.com/infraboard/mcenter/protocol/auth"

	_ "github.com/infraboard/mcube/ioc/config/trace"
)

func main() {
	req := ioc.NewLoadConfigRequest()
	// 配置文件默认路径: etc/applicaiton.toml
	req.ConfigFile.Enabled = true
	err := ioc.ConfigIocObject(req)
	if err != nil {
		panic(err)
	}

	// 启动补充grpc 认证中间件, grpc启动的时候加载认证中间件
	// gprc 认证的核心逻辑 是调用service 模块进行 鉴权(service 模块就是 mcenter内部的模块)
	// 只需要通过 ioc 获取 service模块的控制 直接传递给他就看可以
	appImpl := ioc.GetController(service.AppName).(service.MetaService)
	application.App().GRPC.AddInterceptors(auth.GrpcAuthUnaryServerInterceptor(appImpl))

	// 启动应用, 应用会自动加载 刚才实现的Gin Api Handler
	// 1. 自动加载 gin api handler
	// 2. 自动加载 grpc handler
	err = application.App().Start(context.Background())
	if err != nil {
		panic(err)
	}
}
